# 私有属性的定义和使用
# 在python抽象类时，默认定义的变量是共有的，共有的变量，可以通过对象在任何位置访问
# 类中共有属性一般不建议使用，破坏程序的封装性，在类的外部可以通过对象直接访问，对于数据来说，相对不安全
# 类中的公有方法的作用是为外部提供一种接口，通过接口可以来实现相应的交互操作
# 私有属性，私有属性只能在类的内部使用
# 私有方法，只能在类的内部调用，可以隐藏关键代码.
# 定义属性时，没有任何装饰的都是公有的，如果在属性或方法前，加两个下划线前缀
# 通过get和set方法来对私有属性进行存取
import random


class A(object):

    def __init__(self, name, nickname):
        # 公有属性
        self.n = name
        # 私有属性
        self.__n_name = nickname

    def getNickname(self):
        return self.__n_name

    def setNickname(self, str1):
        self.__n_name = str1

    def show_name_info(self):
        print('我的姓名是：', self.n)

    def show_nickname_info(self):
        print('我的外号是：', self.__n_name)

    def show_rank(self):
        print('我的排名是:', self.__private_method())

    #     私有方法 只能在类里面调用
    def __private_method(self):
        return random.randint(1, 10)


p = A('吴用', '智多星')
p.show_name_info()
p.show_nickname_info()
p.show_rank()
